#include<stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream>

/**
从顺序表中删除具有最小值的元素（假设唯一）并返回被删元素的值。空出的位置由最后一个元素填补，若顺序为空显示出错并退出
**/

#define MAXSIZE 10
typedef int ElemType;  // 定义元素类型
typedef struct
{
   ElemType data[MAXSIZE];  // 定义表长度
   int length; // 当前长度
}SqList;

// 初始化
bool InitList(SqList &L){
    for(int i=0;i<MAXSIZE; i++) L.data[i]=0;
    L.length=0;
    return true;
}

// 插入
bool ListInsert(SqList &L, ElemType e, int loc){
    // 判断位置有效范围
    if (loc < 1 || loc > L.length+1) return false;
    // 判断空间是否溢出
    if (L.length >= MAXSIZE) return false;
    // 这个是元素往后移
    for(int i=L.length; i >= loc; i--)
        L.data[i] = L.data[i-1];
    L.data[loc-1] = e;
    L.length += 1;
    return true;
}

bool DelMin(SqList &L, ElemType &e){
    if (L.length==0) return false;
    if (L.length==1){
        e = L.data[0];
        return true;
    } else{
        e = L.data[0];
    }
    int loc = 0;
    for(int i=1; i<L.length; i++){
        if (L.data[i] < e){
            e = L.data[i];
            loc = i;
        } 
    }
    L.data[loc] = L.data[L.length-1];
    L.data[L.length-1] = 0;
    return true;
}

// 输出操作
void PrintList(SqList L){
    for(int i=0;i<MAXSIZE; i++){
        printf("%d;", L.data[i]);
    }
    printf("\n");
}

int main(){
    SqList L;
    ElemType e;
    InitList(L);
    ListInsert(L, 3, 1);
    ListInsert(L, 5, 1);
    ListInsert(L, 1, 1);
    ListInsert(L, -1, 1);
    ListInsert(L, 9, 1);
    ListInsert(L, 4, 1);
    ListInsert(L, 8, 1);
    PrintList(L);
    DelMin(L, e);
    PrintList(L);
    printf("\n");
    printf("min:%d", e);
    system("pause");
    return 0;
}
